package com.client.common.service;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.util.Date;

/**
 * @Author：
 * @DateTime： 2024/4/1 18:58
 * @PackageName: com.client.common.service
 * @ClassName: FileServiceImpl
 */

@Component
public class FileServiceImpl {

    /**
     *
     * @param httpUrl minio端口
     * @param accessKey minio账号
     * @param secretKey miniom密码
     * @param bucketName 桶的名字
     * @param file 文件
     * @return
     */
    public String fileUpload(String httpUrl, String accessKey, String secretKey, String bucketName, MultipartFile file){
        //建立连接minio
        MinioClient minioClient = MinioClient.builder()
                .endpoint(httpUrl)
                .credentials(accessKey,secretKey)
                .build();
        //获取文件名
        String fileName = file.getOriginalFilename();
        //在bucket中区分不同的文件夹 使用日期作为名字
        String baseDir  = DateUtil.format(new Date(), "yyyyMMdd");
        //将uuid拼接文件名作为新的文件名字放置重复
        String replace = IdUtil.simpleUUID().replace("-", "");
        String newFileName = replace + fileName;
        //创建文件夹
        try {
            PutObjectArgs putObjectArgs = PutObjectArgs.builder().bucket(bucketName)
                    .object(baseDir + "/" + newFileName)
                    .stream(file.getInputStream(), file.getSize(), -1)
                    .contentType(file.getContentType())
                    .build();
            //执行
            minioClient.putObject(putObjectArgs);
            return httpUrl + "/" + bucketName + "/" + baseDir + "/" + newFileName;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
}
